/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef EXECUTOR_BUILDER_H_
#define EXECUTOR_BUILDER_H_
#include <functional>
#include <vector>

namespace AppProtect {
using Executor = std::function<int32_t(int32_t)>;
class ExecutorBuilder {
public:
    ExecutorBuilder& Next(const Executor& Executor);
    ExecutorBuilder& ConditonNext(const Executor& executor,
        const Executor& failedExecutor, const Executor& successExecutor);
    ExecutorBuilder& ConditonNext(const Executor& executor,
        const Executor& failedExecutor, const Executor& successExecutor, const Executor& redoExecutor);
    Executor Build();
private:
    std::vector<Executor> m_executors;
    std::vector<Executor> m_makeExecutors;
};
}

#endif